﻿#ifndef PST_VTKFILTERADAPTER_H
#define PST_VTKFILTERADAPTER_H

#include <vtkAlgorithm.h>
#include <vtkSmartPointer.h>

#include "IVtkFilter.h"

namespace pst
{
    // -----------------------------------------------------------------------------
    // 2. 封装 VTK 内置过滤器的适配器，将 vtkAlgorithm 转换为统一接口，同时添加开关逻辑
    // -----------------------------------------------------------------------------
    class VtkFilterAdapter : public IVtkFilter
    {
    public:
        // 构造时传入一个 vtkAlgorithm 过滤器实例，默认启用过滤器
        VtkFilterAdapter(vtkAlgorithm* filter)
            : m_filter(filter), m_enabled(true)
        {
        }

        // 这里通常调用 SetInputData 为大部分过滤器设置输入
        virtual void setInput(vtkDataObject* input) override
        {
            m_filter->SetInputDataObject(input);
        }

        // 默认输出在端口0上，返回处理后的数据对象
        virtual vtkDataObject* getOutput() override
        {
            return m_filter->GetOutputDataObject(0);
        }

        // 更新过滤器
        virtual void update() override
        {
            m_filter->Update();
        }

        // 开关接口的实现
        virtual void setEnabled(bool enabled) override
        {
            m_enabled = enabled;
        }
        virtual bool isEnabled() const override
        {
            return m_enabled;
        }

    private:
        vtkSmartPointer<vtkAlgorithm> m_filter;
        bool m_enabled;
    };
}
#endif
